package com.by;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;


public class Publisher {
    public static void main(String[] args) throws IOException, TimeoutException {

        //1. 创建连接 实例化连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置服务器地址
        factory.setHost("192.168.131.128");
        //设置账号 密码
        factory.setUsername("admin");
        factory.setPassword("123456");
        //设计端口号
        factory.setPort(5672);

        //设计虚拟主机
        factory.setVirtualHost("/");

        //2创建链接
        Connection conn = factory.newConnection();

        //3.创建信道
        Channel channel = conn.createChannel();


        //4声明交换器
        String exname = "exdirect";//交换机名称
        channel.exchangeDeclare(exname, BuiltinExchangeType.DIRECT); //指定交换机为发布订阅




        //5声明队列
        /**
         * queue  队列的名称
         * durable  队列是否持久 化   true持久化 false非
         * exclusive 是否独占连接
         * autoDelete 是否自动删除  长时间不再使用的队列
         * arguments 附加参数
         */
        String q1 = "errorQueue",q2 ="allQueue";
        channel.queueDeclare(q1, true, false, false, null);
        channel.queueDeclare(q2, true, false, false, null);


        //绑定
        channel.queueBind(q1, exname, "error");
        channel.queueBind(q2, exname, "error");

        //队列2 绑定所有级别的消息
        channel.queueBind(q2, exname, "info");
        channel.queueBind(q2, exname, "warn");

        //6.发送消息
        /**
         * exchange  交换器  在简单队列 模式中 没有  设置为空
         * routingKey  路由键  用于说明消息投递到哪个队列上   这里指定队列名称
         * props  消息的其它属性，如路由头
         * body 要发送的消息内容
         */
      //  channel.basicPublish("",queueName,null,"hello aaaaaaaa!".getBytes());

        //定义一组消息
//        String []msgs={"...","..............................","...........",".....","......................","....."};
//        for(String msg:msgs){
//            channel.basicPublish("", queueName, MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes());
//        }

        channel.basicPublish(exname,"error",MessageProperties.PERSISTENT_TEXT_PLAIN,"用户登录异常".getBytes());
        channel.basicPublish(exname,"warn",MessageProperties.PERSISTENT_TEXT_PLAIN,"用户密码长度太小，不安全".getBytes());
        channel.basicPublish(exname,"info",MessageProperties.PERSISTENT_TEXT_PLAIN,"用户登录成功".getBytes());


        System.out.println("----消息已发送！");


        //关闭连接  释放资源
        channel.close();
        conn.close();

    }
}
